Use the private GdkKeyEvent.translated_key getter
authorEmmanuele Bassi <ebassi@gnome.org>
Fri, 22 May 2020 11:37:37 +0000 (12:37 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Sun, 24 May 2020 14:19:01 +0000 (15:19 +0100)
We can avoid poking directly at the GdkKeyEvent structure, now.

gtk/gtkmain.c

index 4b411e475fa7b58b993bb149ae0659b994361094..e54e603bf4d109b75e1bc0ed4e9f720a21be803b 100644 (file)
@@ -1244,8 +1244,8 @@ static GdkEvent *
 rewrite_event_for_toplevel (GdkEvent *event)
 {
   GdkSurface *surface;
-  GdkKeyEvent *key_event;
   GdkEventType event_type;
+  GdkTranslatedKey *key, *key_no_lock;
 
   surface = gdk_event_get_surface (event);
   if (!surface->parent)
@@ -1259,9 +1259,9 @@ rewrite_event_for_toplevel (GdkEvent *event)
   while (surface->parent)
     surface = surface->parent;
 
-  key_event = (GdkKeyEvent *) event;
+  key = gdk_key_event_get_translated_key (event, FALSE);
+  key_no_lock = gdk_key_event_get_translated_key (event, TRUE);
 
-  /* FIXME: Avoid direct access to the translated[] field */
   return gdk_key_event_new (gdk_event_get_event_type (event),
                             surface,
                             gdk_event_get_device (event),
@@ -1270,8 +1270,7 @@ rewrite_event_for_toplevel (GdkEvent *event)
                             gdk_key_event_get_keycode (event),
                             gdk_event_get_modifier_state (event),
                             gdk_key_event_is_modifier (event),
-                            &key_event->translated[0],
-                            &key_event->translated[1]);
+                            key, key_no_lock);
 }
 
 static gboolean